// Copyright 2022 Hollson. All rights reserved.
// Use of this source code is governed by a MIT style
// license that can be found in the LICENSE file.

package leetcode1

// 暴力法
// 复杂度：
func twoSumV1(nums []int, target int) []int {
	// 理解：从某个索引位置遍历到另一个位置
	for i := 0; i < len(nums); i++ {
		// j只是起始位置不一样而已
		for j := i + 1; j < len(nums); j++ {
			if nums[i]+nums[j] == target {
				return []int{i, j}
			}
		}
	}
	return nil
}

// 哈希法
// 复杂度：O(n)
// 解读：使用map减少了一次切片遍历
func twoSumV2(nums []int, target int) []int {
	hashTable := map[int]int{}
	for i, x := range nums {
		if p, ok := hashTable[target-x]; ok {
			return []int{p, i}
		}
		hashTable[x] = i
	}
	return nil
}
